package controlador;

import classes.Tarefa;
import classes.TarefaServidor;
import dao.TarefaDao;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.GeralException;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 *
 * @author Roberta
 */
public class TarefaControlador {

    private TarefaDao dao;

    public TarefaControlador() {

        this.dao = new TarefaDao();
    }

    /**
     * 
     * @param t = Tarefa
     * @param ts = TarefaServidor
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void inserirTarefa(Tarefa t, TarefaServidor ts) throws ConexaoException, ConsultaException, GeralException {

        if (t.getDataPrevista() == null) {
            throw new GeralException("Digite a data prevista no formatdo dd/mm/aaaa.");
        }
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.add(GregorianCalendar.DAY_OF_MONTH, -1);
        Date hoje = calendar.getTime();
        Date prevista = t.getDataPrevista();
        if (prevista.before(hoje)) {
            throw new GeralException("A data prevista deve ser maior que a data atual!");
        }
        if (t.getPrioridade() < 1) {
            throw new GeralException("Escolha a prioridade da tarefa.");
        }
        if (ts.getServidor().isEmpty()) {
            throw new GeralException("Escolha os servidores para essa tarefa.");
        }
        if (t.getAtividade().trim().equals("") || t.getDetalhe().trim().equals("")) {
            throw new GeralException("Preencha os campos obrigatórios.");
        } else {
            t.setStatus(0);
            this.dao.inserirTarefa(t, ts);
        }
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarStatus() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarStatus();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarParticipo() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarParticipo();
    }

    /**
     * 
     * @param t = Tarefa
     * @param ts = TarefaServidor
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void alterarTarefa(Tarefa t, TarefaServidor ts) throws ConexaoException, ConsultaException, GeralException {
        if (t.getDataPrevista() == null) {
            throw new GeralException("Digite a data prevista no formatdo dd/mm/aaaa.");
        }
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.add(GregorianCalendar.DAY_OF_MONTH, -1);
        Date hoje = calendar.getTime();
        Date prevista = t.getDataPrevista();
        if (prevista.before(hoje)) {
            throw new GeralException("A data prevista deve ser maior que a data atual!");
        }
        if (t.getPrioridade() < 1) {
            throw new GeralException("Escolha a prioridade da tarefa.");
        }
        if (ts.getServidor().isEmpty()) {
            throw new GeralException("Escolha os servidores para essa tarefa.");
        }
        if (t.getAtividade().trim().equals("") || t.getDetalhe().trim().equals("")) {
            throw new GeralException("Preencha os campos obrigatórios.");
        } else {
            this.dao.alterarTarefa(t, ts);
        }
    }

    /**
     * 
     * @param t = Tarefa
     * @throws ConsultaException
     * @throws ConexaoException 
     */
    public void alterarStatus(Tarefa t) throws ConsultaException, ConexaoException {
        this.dao.alterarStatus(t);
    }

    /**
     * 
     * @param t = Tarefa
     * @param ts = TarefaServidor
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void deletarTarefa(Tarefa t, TarefaServidor ts) throws ConexaoException, ConsultaException {
        this.dao.deletarTarefa(t, ts);
    }

    /**
     * 
     * @param t = Tarefa
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Tarefa consultarid(Tarefa t) throws ConexaoException, ConsultaException {
        return (Tarefa) this.dao.consultarid(t);
    }

    /**
     * 
     * @param t = Tarefa
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listar(Tarefa t) throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listar();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarAtrasadas() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarAtrasadas();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarExcluidas() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarExcluidas();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarNaoIniciadas() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarNaoIniciadas();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarTodas() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarTodas();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<TarefaServidor> pesquisarTs() throws ConexaoException, ConsultaException {
        return (ArrayList<TarefaServidor>) this.dao.pesquisarTs();
    }

    /**
     * 
     * @param t = Tarefa
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Tarefa pesquisar(Tarefa t) throws ConexaoException, ConsultaException {
        return (Tarefa) this.dao.pesquisar(t);
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<TarefaServidor> listarTs() throws ConexaoException, ConsultaException {
        return (ArrayList<TarefaServidor>) this.dao.listarTs();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarPorSolicitante() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarPorSolicitante();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Tarefa> listarConcluidas() throws ConexaoException, ConsultaException {
        return (ArrayList<Tarefa>) this.dao.listarConcluidas();
    }

    /**
     * 
     * @param t = Tarefa
     * @throws ConsultaException
     * @throws ConexaoException 
     */
    public void InserirDataInicial(Tarefa t) throws ConsultaException, ConexaoException {
        this.dao.InserirDataInicial(t);
    }

    /**
     * 
     * @param t = Tarefa
     * @throws ConsultaException
     * @throws ConexaoException 
     */
    public void InserirDataConclusao(Tarefa t) throws ConsultaException, ConexaoException {
        this.dao.InserirDataConclusao(t);
    }
}
